package leetcode.editor.cn;
//给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。 
//
// 示例 1: 
//
// 输入: 123
//输出: 321
// 
//
// 示例 2: 
//
// 输入: -123
//输出: -321
// 
//
// 示例 3: 
//
// 输入: 120
//输出: 21
// 
//
// 注意: 退出
//
// 假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设，如果反转后整数溢出那么就返回 0。
// Related Topics 数学

//Java：整数反转
class P7ReverseInteger {
    public static void main(String[] args) {
        Solution solution = new P7ReverseInteger().new Solution();
        // TO TEST
        int target = -2147483648;
        int reverse = solution.reverse(target);
        System.out.println("整数:" + target + "翻转后的数是:" + reverse);
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int reverse(int x) {
            //方法一 字符串法 开始
            //取绝对值
//            long l = Long.parseLong(String.valueOf(x));
//            long temp = Math.abs(l);
//            //转为StringBuffer
//            StringBuffer stringBuffer = new StringBuffer(String.valueOf(temp));
//            //翻转
//            String result = stringBuffer.reverse().toString();
//            if (Long.parseLong(result) > Integer.MAX_VALUE) {
//                result = "0";
//            }
//            return x > 0 ? Integer.parseInt(result) : -Integer.parseInt(result);
            //方法一 字符串法 结束

            //方法二 求余法  开始
//            long result = 0;
//            int tmp = Math.abs(x);
//            while (tmp > 0) {
//                result *= 10;
//                result += tmp % 10;
//                if (result > Integer.MAX_VALUE) {
//                    return 0;
//                }
//                tmp /= 10;
//            }
//            return (int)(x>=0?result:-result);
            //方法二 求余法 结束

            long reverse = 0;
            long hold = Long.parseLong(String.valueOf(x));
            // 多位整数倒转
            while (hold != 0) {
                reverse = reverse * 10 + hold % 10;
                hold /= 10;
            }
            if (reverse > Integer.MAX_VALUE || reverse < Integer.MIN_VALUE) {
                return 0;
            }
            return Integer.parseInt(String.valueOf(reverse));
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}